#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>

void mydaemon()
{
	//1.调用umask将为文件模式创建屏蔽字设置为0
	umask(0);
	//2.调用fork，子进程退出，保证子进程不是进程组的组长进程
	pid_t id=fork();
	if(id<0)
	{
		perror("fork");
	}
	else if(id>0)
	{
		exit(0);
	}
	//3.调用setid创建一个新会话
	setsid();
	//4.忽略SIGCHLD信号，为了不用回收子进程
	struct sigaction sa;
	sa.sa_flags=0;
	sigemptyset(&sa.sa_mask);
	sa.sa_handler=SIG_IGN;
	sigaction(SIGCHLD,&sa,NULL);
	//5.将当前工作目录改为根目录
	chdir("/"); 
	//6.关闭不再需要的文件描述符
	close(0);
	close(1);
	close(2);
}
int main()
{	mydaemon();
	while(1){
		sleep(1);
	}
}


